// 1,字面量
let a1: 10;
a1=10;
// a1=20  不能给a1重新赋值 20  因为a1是10 类似常量
// 2 ，可以使用 | 来连接多个类型 （联合类型）
// 即 指定变量可以为哪些值或者类型

let b1:'male' | 'famale'
b1='male'
b1='famale'
// b1='a' 报错
let c1:boolean | string
c1=true
c1='hahha'
// c1=3 报错

// 3， any  表示可以是任意类型
// let d1:any
let d1:any//声明时 不指定类型  自动是任意类型
d1=10
d1='10'
d1='a'
d1=false



// 4， unknown 表示未知类型

let e:unknown
e=10
e='hello'
e=true


// 5,unknown 和any区别（any尽量不用） 
// unknown类型安全的any
let s:string
// d1是any类型 它可以赋值给任意变量  它霍霍别人 不好
// s=d1


e='hi'
// 6 直接unknown 赋值给字符串 报错  说明unknown是类型安全的
//  s=e
// 解决方法 
if(typeof e ==='string'){
  s=e
}
//类型断言  直接告诉 ts编译器我是什么类型
// 语法： 变量 as 类型   <类型> 变量
s=<string>e
s= e as string 


// 7, void  表示空 以函数为例 就是表示没有返回值的函数
function fn():void {
    
}

// 8,never  表示永远不会返回结果
// 就是报错即没有函数返回值 停啦
function fn2():never {
    throw new Error("报错啦！");
}

